

#ifndef UC_GESSINT_H
#define UC_GESSINT_H

#include "zadesk.h"
#include "zgeent3d.h"
#include "zgegbl.h"
#include "zgegblabb.h"
#pragma pack (push, 8)

class UcGeCurve3d;
class UcGeCurve2d;

class UcGeSurface;

class  
GX_DLLEXPIMPORT
UcGeSurfSurfInt  : public UcGeEntity3d
{

public:

    UcGeSurfSurfInt ();
    UcGeSurfSurfInt (
						const UcGeSurface& srf1, 
						const UcGeSurface& srf2,
						const UcGeTol& tol = UcGeContext::gTol );
    UcGeSurfSurfInt (const UcGeSurfSurfInt& src);

    const UcGeSurface  *surface1        () const;
    const UcGeSurface  *surface2        () const;
    UcGeTol            tolerance        () const;

    int                numResults (UcGe::UcGeIntersectError& err) const;
                    
    UcGeCurve3d*   intCurve (int intNum, ZSoft::Boolean isExternal, UcGe::UcGeIntersectError& err) const;
					
    UcGeCurve2d*   intParamCurve(int num, ZSoft::Boolean isExternal, ZSoft::Boolean isFirst, UcGe::UcGeIntersectError& err) const;

	UcGePoint3d  intPoint (int intNum, UcGe::UcGeIntersectError& err) const;
					
    void               getIntPointParams (int intNum,
                                         UcGePoint2d& param1, UcGePoint2d& param2, UcGe::UcGeIntersectError& err) const;
	void getIntConfigs (int intNum, UcGe::ssiConfig& surf1Left,  UcGe::ssiConfig& surf1Right,
							UcGe::ssiConfig& surf2Left,  UcGe::ssiConfig& surf2Right,
							UcGe::ssiType& intType, int& dim, UcGe::UcGeIntersectError& err ) const;
    int		getDimension (int intNum, UcGe::UcGeIntersectError& err) const;
	UcGe::ssiType	getType(int intNum, UcGe::UcGeIntersectError& err ) const;

    UcGeSurfSurfInt& set (const UcGeSurface& srf1,
                                     const UcGeSurface& srf2,
                                     const UcGeTol& tol = UcGeContext::gTol);

    UcGeSurfSurfInt& operator = (const UcGeSurfSurfInt& crvInt);
};
#pragma pack (pop)
#endif
